package com.app.mapper;

import com.app.entity.po.HuibenClass;
import com.app.vo.ClassInfoVO;
import com.app.vo.HomeworkInfoVO;
import com.app.vo.PunchStatsVO;
import com.app.vo.PunchItemVO;
import com.app.vo.ClassMemberVO;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 班级表 Mapper 接口
 *
 * @author lizi
 * @since 2025-07-29
 */
public interface HuibenClassMapper extends BaseMapper<HuibenClass> {
    /**
     * 查询用户班级列表
     * @param userId 用户ID
     * @return 班级信息列表
     */
    List<ClassInfoVO> selectClassListByUserId(@Param("userId") Long userId);

    /**
     * 查询班级详情
     * @param classId 班级ID
     * @return 班级信息
     */
    ClassInfoVO selectClassInfoById(@Param("classId") Long classId);

    /**
     * 查询班级打卡记录（分页）
     * @param page 分页对象
     * @param classId 班级ID
     * @return 打卡记录列表
     */
    Page<PunchItemVO> selectPunchList(Page<PunchItemVO> page, @Param("classId") Long classId);

    /**
     * 查询班级成员列表（分页）
     * @param page 分页对象
     * @param classId 班级ID
     * @return 班级成员列表
     */
    Page<ClassMemberVO> selectMemberList(Page<ClassMemberVO> page, @Param("classId") Long classId);


    /**
     * 通过邀请码查班级ID
     * @param inviteCode 邀请码
     * @return 班级ID
     */
    Long selectClassIdByInviteCode(@Param("inviteCode") String inviteCode);

    /**
     * 班级成员数+1
     * @param classId 班级ID
     */
    void incrClassMemberCount(@Param("classId") Long classId);

    /**
     * 通过班级ID查询创建者ID
     * @param classId 班级ID
     * @return 创建者ID
     */
    Long selectCreatorIdByClassId(@Param("classId") Long classId);

}
